import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { BbbModule } from './bbb/bbb.module';
import { AaaModule } from './aaa/aaa.module';
import { CccModule } from './ccc/ccc.module';
import { DddModule } from './ddd/ddd.module';

//Nest 在启动的时候，会递归解析 Module 依赖，扫描其中的 provider、controller，注入它的依赖。
//全部解析完后，会监听网络端口，开始处理请求。
//这个过程中，Nest 暴露了一些生命周期方法：

// 首先，递归初始化模块，会依次调用模块内的 controller、provider 的 onModuleInit 方法，然后再调用 module 的 onModuleInit 方法。
// 全部初始化完之后，再依次调用模块内的 controller、provider 的 onApplicationBootstrap 方法，然后调用 module 的 onApplicationBootstrap 方

// 然后监听网络端口。



//先调用每个模块的 controller、provider 的 onModuleDestroy 方法，然后调用 Module 的 onModuleDestroy 方法。
//之后再调用每个模块的 controller、provider 的 beforeApplicationShutdown 方法，然后调用 Module 的 beforeApplicationShutdown 方法。
//然后停止监听网络端口。
//之后调用每个模块的 controller、provider 的 onApplicationShutdown 方法，然后调用 Module 的 onApplicationShutdown 方法。
//之后停止进程。

@Module({
  controllers: [AppController],
  providers: [AppService],
  imports: [BbbModule, AaaModule, CccModule, DddModule],
})

export class AppModule {}
